package com.estagio.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Cidade;
import com.estagio.entity.Estado;
import com.estagio.session.CidadeSession;
import com.estagio.session.EstadoSession;

@ManagedBean(name="cidadeBean")
@SessionScoped
public class CidadeBean {
	
	//ESTADO
	private Cidade cidade = new Cidade();
	private Cidade cidadeSave = new Cidade();
	private Cidade cidadeSelecionado;
	private String mensagem;
	private DataModel dataModelCidade;
	
	//PAIS
	private Estado estado = new Estado();
	private Estado estadoSelecionado = new Estado();
	private Estado estadoCidade = new Estado();
	private DataModel dataModelEstado;
	
	
	public CidadeBean() {
		this.cidade.setEstado(new Estado());
		this.estadoCidade = new Estado();
	}


	//GETTERS AND SETTERS

	public Cidade getCidadeSave() {
		return cidadeSave;
	}

	public void setCidadeSave(Cidade cidadeSave) {
		this.cidadeSave = cidadeSave;
	}

	public DataModel getDataModelCidade() {
		return dataModelCidade;
	}

	public void setDataModelCidade(DataModel dataModelCidade) {
		this.dataModelCidade = dataModelCidade;
	}

	public DataModel getDataModelEstado() {
		return dataModelEstado;
	}

	public void setDataModelEstado(DataModel dataModelEstado) {
		this.dataModelEstado = dataModelEstado;
	}

	public Estado getEstadoCidade() {
		return estadoCidade;
	}

	public void setEstadoCidade(Estado estadoCidade) {
		this.estadoCidade = estadoCidade;
	}

	public Estado getEstadoSelecionado() {
		return estadoSelecionado;
	}

	public void setEstadoSelecionado(Estado estadoSelecionado) {
		this.estadoSelecionado = estadoSelecionado;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	
	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Cidade getCidadeSelecionado() {
		return cidadeSelecionado;
	}

	public void setCidadeSelecionado(Cidade cidadeSelecionado) {
		this.cidadeSelecionado = cidadeSelecionado;
	}
	
	
	//METODOS ESTADO
	public void saveEditCidade() {
		CidadeSession cidadeRN = new CidadeSession();
		Cidade cidade = this.cidadeSave;		
		this.mensagem = cidadeRN.save(cidade);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveCidade() {
		CidadeSession cidadeRN = new CidadeSession();
		Cidade cidade = this.cidadeSave;		
		this.mensagem = cidadeRN.save(cidade);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		RequestContext.getCurrentInstance().update("growlCidade");
	}


	public String deleteCidade() {
		CidadeSession cidadeRN = new CidadeSession();		
		Cidade cidade = this.cidadeSave;
		this.mensagem = cidadeRN.delete(cidade);
		this.cidadeSave = new Cidade();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarCidade";
	}

	public DataModel findCidade() {
		List<Cidade> lista = (List<Cidade>) new CidadeSession().find(this.cidade);
		System.out.println("array no find cidadeBean: " + lista.size());
		this.dataModelCidade = new ListDataModel(lista);
		return this.dataModelCidade;
	}
	
	public void clean() {
		this.cidade = new Cidade();
	}
	
	//METODOS estado (para dialogs)
	public void saveEstado() {
		EstadoSession estadoSession = new EstadoSession();
		Estado estado = this.estado;		
		this.mensagem = estadoSession.save(estado);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}

	public String deleteEstado() {
		EstadoSession estadoRN = new EstadoSession();		
		Estado estado = this.estadoSelecionado;
		this.mensagem = estadoRN.delete(estado);
		this.estadoSelecionado = new Estado();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarEstado";
	}

	public DataModel findEstado() {
		RequestContext.getCurrentInstance().update("panelDialogConsultarEstado");		
		
		List<Estado> listaEstado = new EstadoSession().find(this.estado);
		this.dataModelEstado = new ListDataModel(listaEstado);
		return this.dataModelEstado;
	}
	
	public void selectEstado() {
		Estado estadoAux = (Estado) this.dataModelEstado.getRowData();

		this.cidadeSave.getEstado().setIdEstado(estadoAux.getIdEstado()); 
		this.cidadeSave.getEstado().setDescricao(estadoAux.getDescricao());
		
		RequestContext.getCurrentInstance().update("pgEstadoCidade");
		RequestContext.getCurrentInstance().execute("dialogConsultarEstado.hide()");
	}
	
	//INVOCAR TELAS
	public String newCidade() {
		this.cidadeSave = new Cidade();
		this.cidadeSave.setEstado(new Estado());
		return "manterCidade";
	}
	
	public String consultarCidade() {
		return "consultarCidade";
	}

	public String editarCidade() {
		this.cidadeSave = (Cidade) this.dataModelCidade.getRowData();		
		return "editarCidade";
	}
	
	public String excluirCidade() {
		this.cidadeSave = (Cidade) this.dataModelCidade.getRowData();
		return "excluirCidade";
	}
	
	public void openDialogConsultarEstado() {
		RequestContext.getCurrentInstance().update("idDialogConsultarEstado");
		RequestContext.getCurrentInstance().execute("dialogConsultarEstado.show()");
	}
	
	public void openDialogManterEstado() {
		this.estado = new Estado();
		RequestContext.getCurrentInstance().update("idDialogManterEstado");
		RequestContext.getCurrentInstance().execute("dialogManterEstado.show()");
	}

	
}
